/***
	*******************************************************************************************************************************************************************
	* @file    key.c
	* @version V2.1
	* @date    2024-7-22
	* @author  御龙	
	* @brief   MSPM0G3507小车PID调试通用模板
   *************************************************************************************************
   *  @description
	*	
	*  接口配置可以使用Sysconfig看
   *
>>>>> 其他说明：未经允许不可擅自转发、售卖本套代码，大家都是我国的有为青年，请保持好自己的初心，在此，向你表达我的感谢
	*************************************************************************************************************************************************************
***/

#include "key.h"
//结构体声明
KEY Key[KEY_Number];
/*-------------------------------------------------------------------------------------------*/
/*-----------------------按键读取函数（需要放在10ms中断内进行扫描）--------------------------*/
/*-------------------------------------------------------------------------------------------*/
void Key_Read(void){
	//添加读取按键
	Key[0].Down_State=KEY1;//默认摁下为0
	Key[1].Down_State=KEY2;
	Key[2].Down_State=KEY3;
	
	for(int i=0;i<KEY_Number;i++){
		switch(Key[i].Judge_State){
			case 0:{if(Key[i].Down_State==0){Key[i].Judge_State=1;Key[i].Down_Time=0;}else{Key[i].Judge_State=0;}}break;
			case 1:{if(Key[i].Down_State==0){Key[i].Judge_State=2;}else{Key[i].Judge_State=0;}}break;
			case 2:{if((Key[i].Down_State==1)&&(Key[i].Down_Time<=70)){if(Key[i].Double_Time_EN==0){Key[i].Double_Time_EN=1;Key[i].Double_Time=0;}else{Key[i].Double_Flag=1;Key[i].Double_Time_EN=0;}Key[i].Judge_State=0;}else if((Key[i].Down_State==1)&&(Key[i].Down_Time>70)) Key[i].Judge_State=0;else{if(Key[i].Down_Time>70) Key[i].Long_Flag=1;Key[i].Down_Time++;}}break;
		}
		if(Key[i].Double_Time_EN==1){Key[i].Double_Time++;if(Key[i].Double_Time>=35){Key[i].Short_Flag=1;Key[i].Double_Time_EN=0;}}
	}
}
/*-------------------------------------------------------------------------------------------*/
/*-------------------------------------按键处理函数------------------------------------------*/
//适当添加头文件
#include "oled.h"
#include "delay.h"
#include "motor_ctrl.h"
/*-------------------------------------------------------------------------------------------*/
void KEY_PROC(void)
{
	/*短摁处理*/
	if(Key[0].Short_Flag==1)//切换界面   (我的板子上是 --A1)
	{Key[0].Short_Flag=0;
		if(++OLED_View_Select>=11) OLED_View_Select = 1;
		OLED_Clear();
	}
	else if(Key[1].Short_Flag==1 && key_val==1)//停止电机	(我的板子上是  --A0)
	{Key[1].Short_Flag=0;
		MOTOR1_ENABLE_FLAG=0;MOTOR2_ENABLE_FLAG=0;
		LED2_TOGGLE();
		delay_ms(50);
		LED2_TOGGLE();
		key_val = 0;
	}
	else if(Key[2].Short_Flag==1 && key_val==0)//使能电机		(我的板子上是  --地猛星bsl)
	{Key[2].Short_Flag=0;
		MOTOR1_ENABLE_FLAG=1;MOTOR2_ENABLE_FLAG=1;
		LED3_TOGGLE();
		delay_ms(50);
		LED3_TOGGLE();
		key_val = 1;
	}
	/*双击处理*/       //下面暂时都没有用到，需要可以自行添加处理任务）
	if(Key[0].Double_Flag==1)
	{Key[0].Double_Flag=0;
		
	}
	else if(Key[1].Double_Flag==1)
	{Key[1].Double_Flag=0;
		key_mode = 4;
	}
	else if(Key[2].Double_Flag==1)
	{Key[2].Double_Flag=0;
		
	}
	/*长摁处理*/
	if(Key[0].Long_Flag==1)			//左拨动
	{Key[0].Long_Flag=0;
		key_mode = 3;
	}
	else if(Key[1].Long_Flag==1)	//中间按下
	{Key[1].Long_Flag=0;
		key_mode = 2;
	}
	else if(Key[2].Long_Flag==1)	//前拨动
	{Key[2].Long_Flag=0;
		key_mode = 1;
	}
}
